package cn.openea.perpartner.componet.web.vo;

import cn.openea.perpartner.componet.util.Tools;
import io.netty.util.internal.StringUtil;
import lombok.Data;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * @Name: 调用接口统一返回对象
 * @desc: 这是一个链式函数
 * @author: Mr.Yun
 * @Created: 2022/10/13 18:31
 */
@Data
public class R implements Serializable {

    private static final long serialVersionUID = -3359953023426407391L;

    private Integer code;//状态码
    private String msg;//响应消息
    private Map<String, Object> data = new HashMap<>();//对象数据集，为了共通，这里使用 Map<String, Object>，可放任何对象

    /**
     * 统一成功消息
     * @return
     */
    public static R ok(){
        return ok(null);
    }
    public static R ok(String msg){
        R r = new R();
        r.setCode(200);
        if(Tools.isBlank(msg)){
            r.setMsg("SUCCESS");
        } else {
            r.setMsg(msg);
        }
        return r;
    }

    /**
     * 统一失败消息
     * @return
     */
    public static R error(){
        return error(null);
    }
    public static R error(String msg){
        R r = new R();
        r.setCode(201);
        if(Tools.isBlank(msg)){
            r.setMsg("ERROR");
        } else {
            r.setMsg(msg);
        }
        return r;
    }

    /**
     * 给 对象数据集 设置数据
     * @param key key键
     * @param value value值
     * @return
     */
    public R put(String key, Object value){
        this.data.put(key, value);
        return this;
    }

    /**
     * 给 对象数据集 设置数据
     * @param map 添加map对象中的所有k-v
     * @return
     */
    public R putAll(Map map){
        this.data.putAll(map);
        return this;
    }

    /**
     *  给数据对象 移除某个key
     * @param key 需要移除的key
     * @return
     */
    public R remove(String key){
        this.data.remove(key);
        return this;
    }

}
